package com.socket_1;

import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;

/**
 * @author sijunqiang
 * @data 2021/7/30 23:49
 * @description:
 */
public class Server {

    // 服务端的socket
    private ServerSocket serverSocket;


    public Server(int port) {
        try {
            // 监听这个端口
            this.serverSocket = new ServerSocket(port);
            System.out.println("服务端启动成功：监听的端口号:" + port);
        } catch (IOException e) {
            System.out.println("服务端启动失败");
            e.printStackTrace();
        }
    }


    public void start() {
        doStart();
        System.out.println("无法执行到我？");
    }

    // 开始执行
    private void doStart() {
        try {
            // 获取客户端的socket对象 并从中读取里面的输入流数据。 这个方法是阻塞的 只有建立一次连接才会被唤醒一次。

            Socket client = serverSocket.accept();

            // 构建客户端处理器 专门处理客户端
            ClientHandler clientHandler = new ClientHandler(client);
            clientHandler.start();
        } catch (IOException e) {
            System.out.println("服务端异常!");
        }
    }
}
//
/*网络编程： socket是套连接 功能是使两台机器进行连接
 客户端：
  第一步：先创建客户端socket,并指定要连接的服务端IP和port.
  第二步：获取输出流对象 然后将数据写到网络输出流中.
* 第三步：关闭资源
*
服务端：
   第一步：先创建服务端的socket. 用来监听哪个端口号。
   第二步：调用accect()方法,获取socket对象，并从里面获取输出流的数据。该方法是阻塞的 直到新的连接过来再次被唤醒。
   第三步：读取流中的数据。关闭资源。
* */

